package br.ucb.rastreador.aspecto;

import org.aspectj.lang.Signature;

import br.ucb.rastreador.rmi.cliente.Cliente;
import br.ucb.rastreador.rmi.mapeador.vo.RastroVO;


public aspect Aspecto {	
	
	pointcut chamadaMetodo(): execution(* *(..)) &&
	!within(br.ucb.rastreador.*) &&
	!within(br.ucb.rastreador.comum.*) &&
	!within(br.ucb.rastreador.controle.*) &&
	!within(br.ucb.rastreador.modelo.*) &&
	!within(br.ucb.rastreador.modelo.entidade.*) &&
	!within(br.ucb.rastreador.modelo.persistencia.*) &&
	!within(br.ucb.rastreador.modelo.persistencia.mysql.*) &&
	!within(br.ucb.rastreador.modelo.persistencia.xml.*) &&
	!within(br.ucb.rastreador.negocio.*) &&
	!within(br.ucb.rastreador.negocio.impl.*) &&
	!within(br.ucb.rastreador.rmi.*) &&
	!within(br.ucb.rastreador.rmi.cliente.*) &&
	!within(br.ucb.rastreador.rmi.controlador.*) &&
	!within(br.ucb.rastreador.rmi.mapeador.*) &&
	!within(br.ucb.rastreador.rmi.mapeador.impl.*) &&
	!within(br.ucb.rastreador.rmi.mapeador.vo.*) &&
	!within(br.ucb.rastreador.rmi.servidor.*) &&	
	!within(br.ucb.rastreador.aspecto.*) &&
	!within(br.ucb.rastreador.visao.*) &&
	!within(br.ucb.rastreador.visao.action.*) &&
	!within(br.ucb.rastreador.visao.telas.*) &&
	!within(br.ucb.rastreador.teste.*);
	
	before() : chamadaMetodo(){				
		
		Cliente cliente = new Cliente();
		RastroVO vo = new RastroVO();
		
		Signature signature = thisJoinPointStaticPart.getSignature();
		
		vo.setNomeArquivoFonte(thisJoinPoint.getSourceLocation().getFileName());
		vo.setNumeroLinha(thisJoinPoint.getSourceLocation().getLine());		
		vo.setNomeClasse(thisJoinPoint.getSourceLocation().getWithinType().getSimpleName());
		vo.setNomePacote(thisJoinPoint.getSourceLocation().getWithinType().getPackage().getName());		
		vo.setNomeMetodo(signature.getName());
		vo.setUnidadeExecutada(signature.toString());
		
		try {
			cliente.enviarRastro(vo);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
 